維度表
維度表(Dimension Table) 是維度建模的另一個核心,儲存了與業務事件相關的敘述型資料,用來提供事實表(Fact Table)中度量值的情境補充。這些敘述型資料為分析提供了分類、篩選和彙總的依據,幫助組織從不同角度進行數據分析和報表生成。
接下來會對維度表做詳細介紹,包括維度表的組成、類型及設計時該注意的事項:
案例-數位學習平台
後面的說明我們一樣會用數位學習平台作為案例輔助:
在數位學習平台上,學生會不定時的收到作業,並且自己可以在任意的時間開始做作業,
開始以後系統會讓學生依序作答每一個題目,直到答對所有題目,就能按下完成作業送出,
系統會自動做批改、計算得分。
維度表的組成
- 主鍵(Primary Key):
- 定義:和關聯式資料庫一樣,是該筆資料的唯一值,事實表中的外部鍵會關聯到維度表的主鍵。
- 特點:主鍵應該是唯一且非空值
- 屬性(Attributes):
- 定義:屬性會為數據分析提供情境,用於過濾、分組或進行彙總操作。
- 特點:
- 屬性可以是不同類型的數據(如文字、數字、日期等),例如產品、地點、時間、銷售人員名稱等。
- 屬性通常是可讀的類別資料
- 多層次屬性:
- 有一些維度表蠻常將不同粒度層次的屬性放在一起,方便同一筆資料就能取得不同層次的屬性。例如,時間維度可能包括年、季度、月份、日等層次。
- 特點:
- 再次強調維度表的設計的大原則是**『去正規化』**。
- 層次結構使得資料可以按不同粒度進行分群和彙總,支持「從細到粗」或「從粗到細」的資料切片分析。
- 多層次屬性有助於進行多維度分析,例如同時按照年、月份、地區等進行分析。
常見的維度表類型
- 時間維度表:
- 定義:時間維度表用來描述與時間相關的屬性,如年、季度、月、日、星期等。
- 日期是一個最特別的維度表,幾乎所有分析都會涉及時間維度,時間維度表幫助分析某個業務事件在何時發生,能進行趨勢分析、依據不同的時間區間來彙總數據,也可以針對產業的特殊節日做註記
- 地理維度表:
- 定義:地理維度表存儲與地理位置相關的信息,如國家、省份、城市、區域等。
- 你可以按縣市、地區做分群,甚至經濟條件、氣候等不同資料分類,來幫助分析不同地區的業務表現或客戶行為。
- 產品維度表:
- 定義:產品維度表描述有關產品的信息,如產品名稱、類別、品牌、尺寸、顏色等。
- 用產品屬性來分析銷售數據、產品使用狀況。
- 客戶維度表:
- 定義:與客戶相關的屬性,如客戶姓名、年齡、性別、職業、地理位置等。
- 用於分析客戶行為、購買習慣以及按客戶分類的市場細分報告。
維度表的設計的注意事項
- 簡潔易懂的結構與欄位定義:屬性的定義和結構盡量簡潔,並且有明確的定義與分析意義,能夠為分析提供實際價值
- 避免過度正規化: 過度正規化可能會導致分析效率降低,因此維度表應該是**「寬表」**,以扁平化、多層次屬性放在同一張維度表的做法,來減少資料表之間的關聯
- 緩慢變化維度(Slowly Changing Dimension,SCD):有些維度隨著時間會發生變化,例如:客戶的地址變更,處理維度表中資料變化的是一個挑戰,不同的情境需要不同的處理策略,你需要考量未來資料的可追溯性,常見的處理策略包括:
- SCD Type 1:直接覆蓋舊數據,只保留最新的數據。
- SCD Type 2:為每次變更創建一條新記錄,保留變更歷史。
- SCD Type 3:在原記錄中保留舊值和新值,用於部分歷史查詢。
SCD 不是數字越大就越好,像是 SCD Type3 ,聰明的你應該會發現,其實很少使用。
小結
維度表在維度建模中扮演著關鍵角色,為分析提供了分類、篩選和彙總的依據。合理設計維度表,可以幫助團隊更高效地進行資料分析,並確保資料倉儲具有良好的效能和可擴充性。透過簡化設計、清晰的命名、層次結構的應用和處理緩慢變化的技術,能夠為組織打造強大的資料決策引擎!
明天我們就用一個實際的案例,來走過一次從OLTP的資料表,拆解成OLAP的Data Cube!